import { sha256 } from 'js-sha256';

export const TX_LOCATION_KEY = 'ADOBZ-6BLWU-DBTVF-GRL73-ZLRDO-KUBX3'; // 腾讯位置服务
export const boundingClientRect = async function (selector) {
  const query = uni.createSelectorQuery();
  return new Promise((resolve, reject) => {
    query
      .select(selector)
      .boundingClientRect((rect) => {
        resolve(rect);
      })
      .exec();
  });
};

/**
 * export const checkModbile = function (mobile) {
 * 	var re = /^1[3,4,5,6,7,8,9][0-9]{9}$/;
 * 	var result = re.test(mobile);
 * 	if(!result) {
 * 		// alert("手机号码格式不正确！");
 * 		return false;
 * 	}
 * 	return true;
 * }
 */
export const isMobile = function (mobile) {
  let re = /^1[3-9][0-9]{9}$/;
  return re.test(mobile);
};

/**  生成后端验证的签名，来保证用户的参数没有被第三方修改 */
export const createXsign = async (config) => {
  // ============= 1、设置请求头、门店代号 ==================

  // /** 门店代号 */
  // const custAccountCode = ""

  // /** 门店代号 */
  // let key = "99000002" // 登录之前当前代号为99000002

  // // 这里判断是否登录, 如果是已登录, 替换key为门店代号
  // if(custAccountCode){
  //   key = custAccountCode
  // }
  let key = config.key;

  // ============== 2、获取签名参数项 ================

  // const params = new URLSearchParams()

  /** 时间戳 */
  let xTime = 0;

  xTime = parseInt(`${Date.now()}`);
  // 或者 xTime = parseInt(`${Date.now() / 1000}`) 看需求

  /** 基础参数 param */
  let param = {
    'x-time': xTime, // 当前时间戳
    'x-version': '1.0', // 版本号
  };

  /** 请求里面的数据 data */
  let tempData = {};

  // 参数为holyes开头的key，不参与md5加密，删除
  switch (true) {
    case config.method?.toLocaleLowerCase() == 'post':
      if (config.data) {
        tempData = JSON.parse(JSON.stringify(config.data));
      }
      break;

    case config.method?.toLocaleLowerCase() == 'get':
      if (config.params) {
        tempData = JSON.parse(JSON.stringify(config.params));
      }
      break;
  }

  for (let keyss in tempData) {
    // 忽略Holyes开头的参数, 如果有的话, 一般都不会有
    if (keyss.indexOf('Holyes') != -1 || keyss.indexOf('holyes') != -1) {
      delete tempData[keyss];
    }
  }

  /** 转换前的参数项 */
  let sign = { ...param, ...tempData };
  // console.log('sign', sign);

  // 分页参数不需要加密
  delete sign.limit;
  delete sign.page;

  // ============================ 3、签名参数项ASCII升序 ============================

  /** 排序后的对象 */
  let sobj = {};

  //对象升序
  Object.keys(sign)
    .sort()
    .forEach((key) => {
      sobj[key] = sign[key];
    });

  sobj = { ...sobj, key };

  // ============================ 4、参数拼接末尾增加key参数 ============================

  /** 生成拼接参数后的URLSearchParams字符串 */
  let str = '';

  for (let key in sobj) {
    //拼接
    str += key + '=' + sobj[key] + '&';
  }

  str = str.slice(0, str.length - 1);

  // ============================ 5、拼接好的字符串后 加密 ============================
  console.log('sha256 str', str);

  // 用 sha256 插件加密
  let hash = sha256(str);

  /** 最后 请求的url加上 x-time x-version x-sign */
  config.params = {
    ...config.params,
    ...param,
    'x-hash': hash,
  };
};

export const readFileBase64 = async function (file) {
  return new Promise((resolve, reject) => {
    uni.getFileSystemManager().readFile({
      filePath: file,
      encoding: 'base64',
      success: (ret) => {
        resolve(ret);
      },
      fail: (err) => {
        reject(err);
      },
    });
  });
};

export const delay = async function (time) {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve();
    }, time);
  });
};
